home *** CD-ROM | disk | FTP | other *** search
- MODULE WinDemo;
-
- FROM SYSTEM IMPORT ADR,ADDRESS,VAL,SHORT;
- FROM Applications IMPORT Init,Terminate,deskx,desky,deskw,deskh,
- InitResource,ShowMenuBar,ShowNormal,DeskTree,
- MenuTree,Colour,Appl;
- FROM KbdEvnt IMPORT MenuSearch;
- FROM AES IMPORT ResourceGetAddr,ObjectChange,ObjectFind,FormAlert,
- GrafMouse,EventMultiple,FormDialogue,GrafDragBox,
- WindowFind,GrafRubberBox,MenuBar,WindowGet,
- MenuTitleNormal;
-
- FROM WindowMenue IMPORT InstallMenu,MenuX,MenuY,MenuW,MenuH;
- FROM WinIcon IMPORT CreateIconWindow,OpenIconWindow,InstallIcon;
- FROM EasyDialog IMPORT and, DoMoveDialog,GetObjectState,IsSelected;
- FROM EasyWindows IMPORT TerminateWindows,windowtype,windowlist,
- wstring,createWindow,openWindow,AllElements,
- RedrawProcType,rectangle,DoRedraw,topWindow,clearWindow,setWindow,
- closeWindow,fullWindow,WriteStr,Effects;
-
- FROM WindowDialogue IMPORT OpenWindowDial,CloseWindowDial,DoWindowDial;
-
-
-
-
- FROM GEMAESbase IMPORT Arrow,PointHand,FlatHand, MesageEvent,TimerEvent,KeyboardEvent,
- ButtonEvent,MenuSelected,Top,Mouse1Event,Mouse2Event,
- WindowRedraw, WindowTopped, WindowClosed, WindowFulled,
- WindowArrowed, WindowHorizSlided, WindowVertSlided,
- WindowSized, WindowMoved, WindowNewTop, WindowKind,
- Selected,Black,White;
-
-
- VAR RSCfileName : ARRAY[1..12] OF CHAR;
- ENDE : BOOLEAN;
- MenuAdr,txtAdr,grafAdr : ADDRESS;
- InfoAdr : ADDRESS;
- Info1Adr : ADDRESS;
- Info2Adr : ADDRESS;
- win1,win2,win3 :INTEGER;
-
- OK : BOOLEAN;
- Mo1h : INTEGER;
- WinMenuAktiv : BOOLEAN;
- CONST
- TREE1 = 0; (* TREE *)
- TREE2 = 1; (* TREE *)
- MENABOUT = 2; (* TREE *)
- TREE4 = 3; (* TREE *)
- TREE5 = 4; (* TREE *)
- WINABOUT = 5; (* TREE *)
- TREE7 = 6; (* TREE *)
- ABOUTMEN = 7; (* OBJECT in TREE #0 *)
- WINDOW = 18; (* OBJECT in TREE #0 *)
- MENUWIN = 19; (* OBJECT in TREE #0 *)
- TEXTWIN = 21; (* OBJECT in TREE #0 *)
- GRAFWIN = 20; (* OBJECT in TREE #0 *)
- QUIT = 16; (* OBJECT in TREE #0 *)
- ABOUTWIN = 9; (* OBJECT in TREE #1 *)
- CLOSE = 18; (* OBJECT in TREE #1 *)
- LINKSBUE = 4; (* OBJECT in TREE #3 *)
- CENTRIER = 8; (* OBJECT in TREE #3 *)
- RECHTSBU = 6; (* OBJECT in TREE #3 *)
- BLOCKSAZ = 2; (* OBJECT in TREE #3 *)
- NORMAL = 14; (* OBJECT in TREE #3 *)
- KURSIV = 18; (* OBJECT in TREE #3 *)
- FETT = 12; (* OBJECT in TREE #3 *)
- UNDERLIN = 16; (* OBJECT in TREE #3 *)
- OUTLINED = 10; (* OBJECT in TREE #3 *)
- MAUER = 1; (* OBJECT in TREE #4 *)
- ATARI = 2; (* OBJECT in TREE #4 *)
- KUGELN = 3; (* OBJECT in TREE #4 *)
- FISCHGRE = 4; (* OBJECT in TREE #4 *)
- KACHEL = 5; (* OBJECT in TREE #4 *)
- BAEUME = 6; (* OBJECT in TREE #4 *)
- CHECKBOX = 19; (* OBJECT in TREE #1 *)
- ə
-
- PROCEDURE WindowEvent(Message:ARRAY OF INTEGER;ID:INTEGER ):BOOLEAN;
- VAR Window : INTEGER;
- x,y,w,h :INTEGER;
- x0,y0,w0,h0 :INTEGER;
- BEGIN
- (* Für welches Fenster ist die Meldung?*)
- Window :=Message[3];
- IF Window#0 THEN
- CASE Message[0] OF
- WindowRedraw : (* Window needs redrawing *)
- DoRedraw(Message[3],Message[4],Message[5],
- Message[6],Message[7],TRUE);
- | WindowTopped , (* A window was moved to the top *)
- WindowNewTop : (* Window was moved to top (activated) *)
- topWindow(Window);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
-
- | WindowClosed : (* Window was closed *)
- closeWindow(Window);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
-
- | WindowFulled : (* Wndow was fulled *)
- fullWindow(Window);
- | WindowArrowed : (* Window was arrowed *)
- | WindowHorizSlided : (* Horizontal slider was moved *)
- | WindowVertSlided : (* Vertical slider was moved *)
- | WindowSized , (* Window was sized *)
- WindowMoved : (* Window was moved *)
- setWindow(Window,Message[4],Message[5],
- Message[6],Message[7]);
- (* Redraw erzwingen ! => WindowMenüzeilen werden wieder eingeschaltet *)
- FormDialogue(0,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
- FormDialogue(3,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
- ELSE
- RETURN FALSE
- END(*CASE*);
- RETURN TRUE
- ELSE
- RETURN FALSE
- END(*IF*);
- END WindowEvent;
-
- PROCEDURE redwin(win:INTEGER; r:rectangle);
- BEGIN
- clearWindow(win);
- END redwin;
-
- PROCEDURE redMenwin(win:INTEGER; r:rectangle);
- VAR Window :windowtype;
- OK :BOOLEAN;
- BEGIN
- clearWindow(win);
- IF windowlist[win]^.ontop THEN
- OK:=InstallMenu(win,windowlist[win]^.reference);
- Mo1h:=desky;(* Aktive Menüzeile liegt im Fenster => Überwachung für Menüzeile wieder einschalten *)
- WinMenuAktiv:=TRUE;
-
- END(*IF*);
- END redMenwin;
-
- PROCEDURE redIconWin(win :INTEGER; r:rectangle);
- VAR I : INTEGER;
- BEGIN
- clearWindow(win);
- FOR I:= 3 TO 10 DO
- WriteStr(win,I,I,"Test Text");
- END(*FOR*);
- InstallIcon(win,r);
- END redIconWin;
-
- PROCEDURE DoGrafIconDia(window,mousex,mousey :INTEGER);
- VAR Index : INTEGER;
- State : INTEGER;
- win : windowtype;
- i : INTEGER;
- BEGIN
- win := windowlist[window]^;
- Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
- State:= GetObjectState(windowlist[window]^.reference,Index);
- IF and(State,Selected) AND (Index>0) THEN
- ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
- win.work.y,win.work.w,win.work.h,State-Selected,1);
- windowlist[window]^.InteriorStyle:=1C;
- windowlist[window]^.FillStyle:=1C;
- windowlist[window]^.colour:=White;
- ELSIF ~and(State,Selected) AND (Index>0) THEN
-
-
- windowlist[window]^.InteriorStyle:=2C;
- windowlist[window]^.colour:=Black;
- FOR i := MAUER TO BAEUME DO
- IF IsSelected(i,win.reference) THEN
- ObjectChange(windowlist[window]^.reference,i,0,win.work.x,
- win.work.y,win.work.w,win.work.h,
- GetObjectState(win.reference,i)-Selected,1);
- END(*IF*);
- END(*FOR*);
- ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
- win.work.y,win.work.w,win.work.h,State+Selected,1);
-
- IF MAUER = Index THEN
- windowlist[window]^.FillStyle:=CHR(9)
-
- ELSIF ATARI = Index THEN
- windowlist[window]^.FillStyle:=CHR(10);
-
- ELSIF KUGELN = Index THEN
- windowlist[window]^.FillStyle:=CHR(19);
-
- ELSIF FISCHGRE = Index THEN
- windowlist[window]^.FillStyle:=CHR(16)
-
- ELSIF KACHEL = Index THEN
- windowlist[window]^.FillStyle:=CHR(22)
-
- ELSIF BAEUME = Index THEN
- windowlist[window]^.FillStyle:=CHR(12)
-
- END(*IF*);
- END(*IF*);
- IF Index>0 THEN
- FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
- FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
- END(*IF*);
- END DoGrafIconDia;
-
- PROCEDURE DoTextIconDia(window,mousex,mousey :INTEGER);
- VAR Index : INTEGER;
- State : INTEGER;
- win : windowtype;
- BEGIN
- win := windowlist[window]^;
- Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
- State:= GetObjectState(windowlist[window]^.reference,Index);
- IF and(State,Selected) AND (Index>1) THEN
- ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
- win.work.y,win.work.w,win.work.h,State-Selected,1);
- IF Index = NORMAL THEN
- EXCL(windowlist[window]^.texteffects,Shaded);
- ELSIF Index = KURSIV THEN
- EXCL(windowlist[window]^.texteffects,Italic);
- ELSIF Index = FETT THEN
- EXCL(windowlist[window]^.texteffects,Bold);
- ELSIF Index = UNDERLIN THEN
- EXCL(windowlist[window]^.texteffects,Underlined);
- ELSIF Index = OUTLINED THEN
- EXCL(windowlist[window]^.texteffects,Outlined);
- END(*IF*);
- ELSIF ~and(State,Selected) AND (Index>1) THEN
- ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
- win.work.y,win.work.w,win.work.h,State+Selected,1);
- IF Index = NORMAL THEN
- INCL(windowlist[window]^.texteffects,Shaded);
- ELSIF Index = KURSIV THEN
- INCL(windowlist[window]^.texteffects,Italic);
- ELSIF Index = FETT THEN
- INCL(windowlist[window]^.texteffects,Bold);
- ELSIF Index = UNDERLIN THEN
- INCL(windowlist[window]^.texteffects,Underlined);
- ELSIF Index = OUTLINED THEN
- INCL(windowlist[window]^.texteffects,Outlined);
- END(*IF*);
- END(*IF*);
- IF Index>0 THEN
- FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
- FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
- END(*IF*);
- END DoTextIconDia;
-
- PROCEDURE Auswahl;
- VAR formret : INTEGER;
- String : ARRAY [0..127] OF CHAR;
- message :INTEGER;
- events,flag,mx,my,mbutton,mstate,scancode,mclicks,u:INTEGER;
- MX,MY,MW,MH : INTEGER;
- Mo1x,Mo1w,Mo1y : INTEGER;
- RetChar : CHAR;
- s:wstring;
- rd :RedrawProcType;
- MsgBuf :ARRAY[0..7] OF INTEGER;
- ok : BOOLEAN;
- w: INTEGER;
- BEGIN
- flag :=MesageEvent+TimerEvent+KeyboardEvent+ButtonEvent+Mouse1Event+Mouse2Event;
- ResourceGetAddr(0,MENABOUT,InfoAdr);
- ResourceGetAddr(0,WINABOUT,Info1Adr);
- ResourceGetAddr(0,TREE7,Info2Adr);
- ResourceGetAddr(0,TREE2,MenuAdr);
- ResourceGetAddr(0,TREE5,grafAdr);
- ResourceGetAddr(0,TREE4,txtAdr);
- Mo1x:=0;Mo1y:=0;Mo1h:=desky;Mo1w:=deskw;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- WinMenuAktiv:=FALSE;
-
- REPEAT
- ENDE := FALSE;
- events:=EventMultiple(flag,2,03,01,
- 0,Mo1x,Mo1y,Mo1w,Mo1h,(* wartet darauf das Maus sich in die Menüzeile bewegt *)
- 0,MX,MY,MW,MH,(* wartet darauf das Maus WindowMenü betritt *)
- ADR(MsgBuf),
- 10000,0,(* Timer Event*)
- mx,my,
- mbutton,mstate,scancode,mclicks);
- IF and(events,MesageEvent)THEN
- IF MsgBuf[0]=MenuSelected THEN
- message:= MsgBuf[4];
- IF ~WinMenuAktiv THEN
- CASE message OF
- ABOUTMEN : IF win1<1 THEN
- s:=" Menu-Info ";
- win1:=OpenWindowDial(InfoAdr,s);
- ELSE
- topWindow(win1);
- END(*IF*);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- formret:=DoWindowDial(Appl,win1,InfoAdr,0);
- IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
-
- |QUIT : ENDE := TRUE
- |WINDOW : s:="Window-Demo";
- rd:=redwin;
- createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
- openWindow(u,00,00,00,00);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- |MENUWIN : s:=" Window with Menubar ";
- rd:=redMenwin;
- createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
- openWindow(u,300,200,300,100);
- ok:=InstallMenu(u,MenuAdr);
- WinMenuAktiv:=TRUE;
- Mo1h:=desky;
- |TEXTWIN : s:= " Window mit IconLeiste ";
- rd:=redIconWin;
- u:=CreateIconWindow(txtAdr,s,00,00,00,00,rd,AllElements);
- OpenIconWindow(u,100,100,110,110);
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
-
- |GRAFWIN : s:= " Window mit IconLeiste ";
- rd:=redIconWin;
- u:=CreateIconWindow(grafAdr,s,00,00,00,00,rd,AllElements);
- OpenIconWindow(u,100,100,100,100);
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- ELSE
- END(*CASE*);
- ShowNormal(MsgBuf[3]);
- ELSE
- CASE message OF
- ABOUTWIN : IF win2<1 THEN
- s:=" Window-Info ";
- win2:=OpenWindowDial(Info1Adr,s);
- ELSE
- topWindow(win2);
- END(*IF*);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- formret:=DoWindowDial(Appl,win2,Info1Adr,0);
- IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
- |CHECKBOX : IF win3<1 THEN
- s:=" Window-Checkbox ";
- win3:=OpenWindowDial(Info2Adr,s);
- ELSE
- topWindow(win3);
- END(*IF*);
- (* Menü wieder einschalten bzw WindowMenü ausschalten! *)
- ShowMenuBar(TRUE);
- WinMenuAktiv:=FALSE;
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- formret:=DoWindowDial(Appl,win3,Info2Adr,0);
- IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
- |CLOSE : ENDE := TRUE
- ELSE
- END(*CASE*);
- MenuTitleNormal(MenuAdr,MsgBuf[3],1)
- END(*IF*);
- ELSE
- ok:=WindowEvent(MsgBuf,Appl);
- END(*IF*);
- ELSIF and(events,KeyboardEvent) THEN
- IF ~MenuSearch(Appl,MenuTree,mstate,scancode,RetChar) THEN
- IF RetChar=33C THEN (* ESC-Taste gedrückt!*)
- ShowMenuBar(FALSE);
- (* Hier wird ein Kommplett Redraw erzwungen ! *)
- FormDialogue(0,0,0,0,0,deskx,desky,deskw,deskh);
- FormDialogue(3,0,0,0,0,deskx,desky,deskw,deskh);
- (* Menü wieder einschalten *)
- ShowMenuBar(TRUE);
- END(*IF*);
- END(*IF*);
- ELSIF and(events,Mouse1Event) THEN
- (* Menü wieder einschalten *)
- ShowMenuBar(TRUE);
- Mo1h:=0; (* Menüzeile ist aktiv -> Braucht nicht nochmals aktiviert zu werden *)
- MX:=MenuX;MY:=MenuY;MH:=MenuH;MW:=MenuW;(* Überwachung der WindowMenüZeile einschalten*)
- WinMenuAktiv:=FALSE;
-
- ELSIF and(events,Mouse2Event) THEN
- (* WindowMenü wieder einschalten *)
- ok:=InstallMenu( WindowFind(mx,my),MenuAdr);
- IF ok THEN
- Mo1h:=desky; (* WindowMenüzeile ist aktiv *)
- MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
- WinMenuAktiv:=TRUE;
- END(*IF*);
- ELSIF and(events,ButtonEvent) THEN
- w:=WindowFind(mx,my);
- IF w=win1 THEN
- formret:=DoWindowDial(Appl,win1,InfoAdr,0);
- IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
- ELSIF w=win2 THEN
- formret:=DoWindowDial(Appl,win2,Info1Adr,0);
- IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
- ELSIF w=win3 THEN
- formret:=DoWindowDial(Appl,win3,Info2Adr,0);
- IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
- ELSE
- IF windowlist[w]#NIL THEN
- IF windowlist[w]^.reference=txtAdr THEN
- DoTextIconDia(w,mx,my);
- ELSIF windowlist[w]^.reference=grafAdr THEN
- DoGrafIconDia(w,mx,my);
- END(*IF*);
- END(*IF*);
- END(*IF*);
- END(*IF*);
- UNTIL ENDE
- END Auswahl;
-
- BEGIN
- RSCfileName :='WINDOWME.RSC';
- Init;
- win1:=-1;win2:=-1;win3:=-1;
- OK:=InitResource(-1,TREE1,RSCfileName);
- IF OK THEN Auswahl END(*IF*);
- TerminateWindows;
- Terminate;
- END WinDemo.
-